前言

这里是一些个人总结。

最短路径

寻找最短路径

[dist,path,pred] = graphshortestpath(D, i, j)

  • dist:最短距离
  • path:最短距离经过的路径节点
  • pred:从i到每个节点的最短路径中,目标节点的先驱,即目标节点的前面一个节点
  • D:稀疏矩阵(通过D = sparse(A)将普通矩阵A转化为稀疏矩阵D
  • i:起点
  • j:终点

绘制最短路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
h = view(biograph(D, [], 'showArrows', 'on', 'ShowWeights', 'on'))
a=zeros(7);
a(1,2)=4;a(1,3)=2;
a(2,3)=3;a(2,4)=2;a(2,5)=6;
a(3,4)=5;a(3,6)=4;
a(4,5)=2;a(4,6)=7;
a(5,6)=4;a(5,7)=8;
a(6,7)=3;
% 构建稀疏矩阵
b=sparse(a);
% 画网络图
h=view(biograph(b,[],'showArrows','on','ShowWeights','on'));
[dist,path,pred] = graphshortestpath(b,1,7);
% Mark the nodes and edges of the shortest path
set(h.Nodes(path),'Color',[1 0.4 0.4])
edges = getedgesbynodeid(h,get(h.Nodes(path),'ID'));
set(edges,'LineColor',[1 0 0])
set(edges,'LineWidth',1.5)

数组中各元素位次

1
2
3
X = [1 5 9 3 2 6; 4 9 3 0 2 1; 8 3 2 1 4 2]
[~,G]=sort(-X);
[~,G]=sort(I);

G(i,j)表示X(i,j)在第j列中从大到小排的位次)